#!/sbin/openrc-run

description='Start/stop the preload daemon'
extra_started_commands='dump reload'
description_dump='Dump the config and state of the daemon (to the logfile)'
description_reload='Reload the daemon'

PIDFILE="/var/run/preload.pid"

depend() {
	after localmount
	use netmount ntpd
}

dump() {
	local pid
	pid=$(cat ${PIDFILE})

	ebegin "Dumping the config and state of preload"
	if [ -n "${pid}" ]; then
		kill -USR1 ${pid}
		kill -USR2 ${pid}
	fi
	eend ${?} && \
	einfo "These should have been written to ${PRELOAD_LOGFILE:-/var/log/preload.log}"
}

reload() {
	ebegin "Reloading preload"
	kill -HUP $(cat ${PIDFILE})
	eend ${?}
}

start() {
	local ionice

	ebegin "Starting preload"

	#MIN_MEMORY=${MIN_MEMORY:-256}
	# Check for > MIN_MEMORY MB
	#free -m | awk '/Mem:/ {exit ($2 >= ('"$MIN_MEMORY"'))?0:1}' || exit 0

	# First try to start with ionice; if that fails, try without.
	for ionice in "ionice ${IONICE_OPTS:--c3}" ''; do
		# Avoid 'ionice not found' errors
		${ionice} true >/dev/null 2>&1 || continue

		${ionice} start-stop-daemon --start --quiet --background \
			--make-pidfile --pidfile ${PIDFILE} \
			--exec /usr/sbin/preload -- \
			-l ${PRELOAD_LOGFILE:-/var/log/preload.log} \
			-V ${PRELOAD_VERBOSITY:-1} \
			-n ${PRELOAD_NICE:-15} \
			-s ${PRELOAD_STATEFILE:-""} \
			${PRELOAD_OPTS} -f \
			&& break
	done

	eend ${?}
}

stop() {
	ebegin "Stopping preload (this may take a while)"
	start-stop-daemon --stop --retry 120 --quiet --pidfile ${PIDFILE}
	eend ${?}
}
